package com.yuhanginfo.modules.web.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HttpPost {
	private HttpPost(){}
	private static Logger log = LoggerFactory.getLogger(HttpPost.class);
	/** 
    * 向指定URL发送POST请求 
    * @param url 
    * @param paramMap 
    * @return 响应结果 
    */  
   public static String sendPost(String url, Map<String, String> paramMap) {  
       PrintWriter out = null;  
       BufferedReader in = null;  
       String result = "";  
       try {  
           URL realUrl = new URL(url);  
           // 打开和URL之间的连接  
           URLConnection conn = realUrl.openConnection();  
           // 设置通用的请求属性  
           conn.setRequestProperty("accept", "*/*");  
           conn.setRequestProperty("connection", "Keep-Alive");  
           conn.setRequestProperty("user-agent","MMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36");  
           conn.setRequestProperty("Charset", "UTF-8");  
           // 发送POST请求必须设置如下两行  
           conn.setDoOutput(true);  
           conn.setDoInput(true);  
           // 获取URLConnection对象对应的输出流  
           out = new PrintWriter(conn.getOutputStream());  
 
           // 设置请求属性  
           String param = "";  
           if (paramMap != null && paramMap.size() > 0) {  
               Iterator<String> ite = paramMap.keySet().iterator();
               while (ite.hasNext()) {  
                   String key = ite.next();// key  
                   String value = paramMap.get(key);  
                   param += key + "=" + value + "&";  
               }  
               param = param.substring(0, param.length() - 1);  
           }  
 
           // 发送请求参数  
           out.print(param);  
           // flush输出流的缓冲  
           out.flush();  
           // 定义BufferedReader输入流来读取URL的响应  
           in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); 
           String line;  
           while ((line = in.readLine()) != null) {  
               result += line;  
           }  
       } catch (Exception e) { 
    	   log.error("发送 POST 请求出现异常！" + e,e);
       }  
       // 使用finally块来关闭输出流、输入流  
       finally {  
           try {  
               if (out != null) {  
                   out.close();  
               }  
               if (in != null) {  
                   in.close();  
               }  
           } catch (IOException ex) {  
               log.error(ex.getMessage(),ex);
           }  
       }  
       return result;  
   }  

}
